import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def update_points(num):
    '''
    更新数据点
    '''
    point_ani.set_data(x[num], y[num])
    return point_ani,
 
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

fig = plt.figure(tight_layout=True) #进行动画绘制的figure
plt.plot(x,y)
point_ani, = plt.plot(x[0], y[0], "ro")


# 开始制作动画
'''
    FuncAnimation函数生成动画。参数说明：
        fig 进行动画绘制的figure
        func 自定义动画函数，即传入刚定义的函数animate
        frames 动画长度，一次循环包含的帧数
        interval 更新频率，以ms计
        blit 选择更新所有点，还是仅更新产生变化的点。应选择True，但mac用户请选择False，否则无法显示动画
'''
ani = animation.FuncAnimation(fig=fig
                              ,func=update_points
                              ,frames=100
                              ,interval=100
                              ,blit=True)

# ani.save('sin_test2.gif', writer='imagemagick', fps=10)
plt.show()


#--------------------------------------------------------------

# def update_points(num):
#     '''
#     更新数据点
#     '''
#     point_ani.set_data(x[num], y[num])
#     point_ani.set_marker("o")
#     point_ani.set_markersize(8)
    
#     text_pt.set_position((x[num], y[num]))
#     text_pt.set_text("x=%.3f, y=%.3f"%(x[num], y[num]))
#     return point_ani,text_pt,
 
# x = np.linspace(0, 2*np.pi, 100)
# y = np.sin(x)
 
# fig = plt.figure(tight_layout=True)
# plt.plot(x,y)
# point_ani, = plt.plot(x[0], y[0], "ro")
# plt.grid(ls="--")
# text_pt = plt.text(4, 0.8, '', fontsize=16)

# # 开始制作动画
# '''
#     FuncAnimation函数生成动画。参数说明：
#         fig 进行动画绘制的figure
#         func 自定义动画函数，即传入刚定义的函数animate
#         frames 动画长度，一次循环包含的帧数
#         interval 更新频率，以ms计
#         blit 选择更新所有点，还是仅更新产生变化的点。应选择True，但mac用户请选择False，否则无法显示动画
# '''
# ani = animation.FuncAnimation(fig=fig
#                               ,func=update_points
#                               ,frames=100
#                               ,interval=100
#                               ,blit=True)

# # ani.save('sin_test2.gif', writer='imagemagick', fps=10)
# plt.show()